export function stringIsNull(str) {
	if (str === 0) {
		return false;
	} else if (str == "null" || str == "" || str == null || str == undefined || str == "undefined") {
		return true;
	} else {
		if (typeof str == "string" && trimAll(str) == "") {
			return true;
		} else {
			return false;
		}
	}
}

// 去所有空格;
export function trimAll(str) {
	return str.replace(/\s/g, "");
}

export const toast = (msg) => {
	uni.showToast({
		title: msg,
	icon:'none'
	});
};

/**
 * 验证身份证号码是否正确
 * @param {string} idCard - 身份证号码字符串
 * @returns {Object} 验证结果，包含是否有效及相关信息
 */

export function validateIdCard(idCard) {
	// 去除空格
	idCard = (idCard || '').trim();

	// 1. 验证长度
	if (idCard.length !== 18) {
		return {
			valid: false,
			message: '身份证号码必须位18位'
		}
	}

	// 2. 验证基本格式
	const reg = /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
	if (!reg.test(idCard)) {
		return {
			valid: false,
			message: '身份证号码格式不正确'
		};
	}

	// 3. 验证校验码
	const factors = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
	const codes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
	let sum = 0;

	for (let i = 0; i < 17; i++) {
		sum += parseInt(idCard[i]) * factors[i];
	}

	const checkCode = codes[sum % 11];
	if (checkCode.toUpperCase() !== idCard[17].toUpperCase()) {
		return {
			valid: false,
			message: '身份证校验码错误'
		};
	}

	// 4. 验证出生日期
	const year = idCard.substr(6, 4);
	const month = idCard.substr(10, 2);
	const day = idCard.substr(12, 2);
	const birthDate = new Date(`${year}-${month}-${day}`);

	if (
		birthDate.getFullYear() != year ||
		birthDate.getMonth() + 1 != month ||
		birthDate.getDate() != day
	) {
		return {
			valid: false,
			message: '出生日期无效'
		};
	}

	// 5. 提取信息
	return {
		valid: true,
		message: '身份证号码有效',
		info: {
			birth: `${year}-${month}-${day}`,
			gender: parseInt(idCard[16]) % 2 === 1 ? '男' : '女',
			areaCode: idCard.substr(0, 6)
		}
	};
}

/**
 * 验证营业执照号
 * @param {string} idCard - 身份证号码字符串
 * @returns {Object} 验证结果，包含是否有效及相关信息
 */
export function validateLicenseNo(value) {
	// 去除空格
	value = (value || '').trim();
	if (!value) {
		return {
			valid: false,
			message: '请输入营业执照号'
		};
	}

	// 统一社会信用代码规则：18位，包含数字和大写字母
	const reg = /^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/;

	if (!reg.test(value)) {
		return {
			valid: false,
			message: '请输入正确的营业执照号格式'
		};
	}

	// 校验码验证（根据国家标准GB/T 32100-2015）
	if (!checkLicenseCode(value)) {
		return {
			valid: false,
			message: '营业执照号校验不正确'
		};
	}

	return {
		valid: true,
		message: '校验通过',
	};

};

// 校验码验证函数
export function checkLicenseCode(code) {
	// 加权因子
	const weightFactor = [
		1,
		3,
		9,
		27,
		19,
		26,
		16,
		17,
		20,
		29,
		25,
		13,
		8,
		24,
		10,
		30,
		28
	];
	// 代码字符集
	const codeMap = new Map([
		["0", 0],
		["1", 1],
		["2", 2],
		["3", 3],
		["4", 4],
		["5", 5],
		["6", 6],
		["7", 7],
		["8", 8],
		["9", 9],
		["A", 10],
		["B", 11],
		["C", 12],
		["D", 13],
		["E", 14],
		["F", 15],
		["G", 16],
		["H", 17],
		["J", 18],
		["K", 19],
		["L", 20],
		["M", 21],
		["N", 22],
		["P", 23],
		["Q", 24],
		["R", 25],
		["T", 26],
		["U", 27],
		["W", 28],
		["X", 29],
		["Y", 30]
	]);

	// 分离校验码
	const codes = code.split("");
	const checkCode = codes.pop();

	// 计算前17位与对应因子乘积之和
	let sum = 0;
	for (let i = 0; i < 17; i++) {
		const codeValue = codeMap.get(codes[i]);
		if (codeValue === undefined) {
			return false; // 包含非法字符
		}
		sum += codeValue * weightFactor[i];
	}

	// 计算校验码
	const checkCodeValue = 31 - (sum % 31);
	const computedCheckCode = checkCodeValue === 31 ? 0 : checkCodeValue;

	// 查找对应的字符
	let actualCheckCode = "";
	for (const [key, value] of codeMap.entries()) {
		if (value === computedCheckCode) {
			actualCheckCode = key;
			break;
		}
	}

	return actualCheckCode === checkCode;
};

// 电话号码校验规则
export function validatePhone(value) {
	value = (value || '').trim();
	if (!value) {
		return {
			valid: false,
			message: '请输入电话号码'
		};
	}

	// 清除可能的空格
	const phone = value.replace(/\s/g, "");

	// 手机号校验规则（11位，以1开头，第二位3-9）
	const mobileReg = /^1[3-9]\d{9}$/;
	// 固定电话校验规则（带区号，可能有分机号）
	const landlineReg = /^0\d{2,3}-\d{7,8}(-\d{1,6})?$/;

	if (mobileReg.test(phone) || landlineReg.test(phone)) {
		// 5. 提取信息
		return {
			valid: true,
			message: '验证通过',
		};
	} else {
		return {
			valid: false,
			message: '请输入正确的电话号码格式（手机号：11位数字；固定电话：区号-号码，如010-12345678）'
		};
	}
};

// 数字校验规则
export function validateNumber(value) {
	value = (value || '').trim();
	// if (!value) {
	// 	return {
	// 		valid: false,
	// 		message: '请输入银行账号'
	// 	};
	// }

	// 纯数字校验正则
	const reg = /^\d+$/;

	if (!reg.test(value)) {
		return {
			valid: false,
			message: '只能输入数字'
		};
	}

	// 5. 提取信息
	return {
		valid: true,
		message: '校验通过',

	};
};